%!TEX root = ../../csuthesis_main.tex
\chapter{LitePal源码分析}

\section{结构分析}

\subsection{UML类图}





\begin{figure}[hbt]
    \centering
    \includegraphics[width=0.8\linewidth]{images/leitu.png}
    \caption{基于LitePal结构实现的类图}
    \label{f.example}
\end{figure}


\subsection{UML时序图}


\begin{figure}[hbt]
    \centering
    \includegraphics[width=0.8\linewidth]{images/shixutu.png}
    \caption{基于LitePal结构实现的时序图}
    \label{f.example}
\end{figure}

\subsection{项目基础包及功能}

如图所示为LitePal源码中配备的所有代码包。

\begin{figure}[hbt]
    \centering
    \includegraphics[width=0.8\linewidth]{images/kuangjiatu.png}
    \caption{LitePal代码包}
    \label{f.example}
\end{figure}

\section{编码分析}

\subsection{映射关系的处理}
处理一对多关系的的情况。比如Song Alum，一个Alum有多首Song，一首Song属于一个Alum。所以如果Song中定义一个私有Alum变量，Alum中有 个关于Song的List或者Set的私有变量，那么Alum与Song就有一对多的关系。如果Alum中没有关于Song的List或者Set，或者只有一个Song私有变 量，那么Alum对于Song就是一对一的关系。处理多对一关系的情况。Song这边只需要关于Alum的FK即可。如果是多对多的关系，就需要中间表来处理， 并且中间表的名字是根据两个表名字的字母顺序来创建的。
图中表现了它们的关系：

\begin{figure}[hbt]
    \centering
    \includegraphics[width=0.8\linewidth]{images/p1.png}
    \caption{表及中间表}
    \label{f.example}
\end{figure}
一个对象与其他对象的关系可以归结为这几种：
\begin{figure}[hbt]
    \centering
    \includegraphics[width=0.8\linewidth]{images/p2.png}
    \caption{对象间关联}
    \label{f.example}
\end{figure}


\section{分析器}

在上边几个操作中都用到了分析器，分析器的作用主要是将当前对象所关联的表的信息更新到当前对象，主要涉及了外键的更新 这些外键的信息在每个对象之后的存储更新等操作提供了更加准确的依据，让数据库的信息更加准确。

\newpage
